home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 February: Tool Chest / Dev.CD Feb 94.toast / Tool Chest / Development Platforms / MPW Related / MPW Interfaces / CIncludes / Memory.h < prev    next >
Encoding:
Text File  |  1993-09-17  |  9.8 KB  |  350 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        Memory.h
  3.  
  4.     Copyright:    © 1983-1993 by Apple Computer, Inc.
  5.                 All rights reserved.
  6.  
  7.     Version:    System 7.1 for ETO #11
  8.     Created:    Tuesday, March 30, 1993 18:00
  9.  
  10. */
  11.  
  12. // NOTE!!!!!!!!!!!
  13. //
  14. // Don’t change GetHandleSize and GetPtrSize into inlines.  They are documented as returning
  15. // 0 in case of an error in Inside Mac, but the traps actually return an error code in D0.
  16. // The glue sets D0 to 0 if an error occured.
  17.  
  18. #ifndef __MEMORY__
  19. #define __MEMORY__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24.  
  25.  
  26. enum {
  27.  
  28.  maxSize = 0x800000,    /*Max data block size is 8 megabytes*/
  29.  defaultPhysicalEntryCount = 8,
  30.  
  31. /* values returned from the GetPageState function */
  32.  kPageInMemory = 0,
  33.  kPageOnDisk = 1,
  34.  kNotPaged = 2
  35. };
  36.  
  37. typedef long Size;        /* size of a block in bytes */
  38. typedef pascal long (*GrowZoneProcPtr)(Size cbNeeded);
  39.  
  40. struct Zone {
  41.  Ptr bkLim;
  42.  Ptr purgePtr;
  43.  Ptr hFstFree;
  44.  long zcbFree;
  45.  GrowZoneProcPtr gzProc;
  46.  short moreMast;
  47.  short flags;
  48.  short cntRel;
  49.  short maxRel;
  50.  short cntNRel;
  51.  short maxNRel;
  52.  short cntEmpty;
  53.  short cntHandles;
  54.  long minCBFree;
  55.  ProcPtr purgeProc;
  56.  Ptr sparePtr;
  57.  Ptr allocPtr;
  58.  short heapData;
  59. };
  60.  
  61. typedef struct Zone Zone;
  62. typedef Zone *THz;
  63.  
  64. struct MemoryBlock {
  65.  void * address;
  66.  unsigned long count;
  67. };
  68.  
  69. typedef struct MemoryBlock MemoryBlock;
  70.  
  71. struct LogicalToPhysicalTable {
  72.  MemoryBlock logical;
  73.  MemoryBlock physical[defaultPhysicalEntryCount];
  74. };
  75.  
  76. typedef struct LogicalToPhysicalTable LogicalToPhysicalTable;
  77.  
  78.  
  79. typedef short PageState;
  80. typedef short StatusRegisterContents;
  81.  
  82. #ifdef __cplusplus
  83. extern "C" {
  84. #endif
  85. #define GetApplLimit() (* (Ptr*) 0x0130)
  86. #pragma parameter __A0 GetZone
  87. pascal THz GetZone(void)
  88.  = 0xA11A; 
  89. #define SystemZone() (* (THz*) 0x02A6)
  90. #define ApplicZone() (* (THz*) 0x02AA)
  91. #define ApplicationZone() (* (THz*) 0x02AA)
  92. #pragma parameter __A0 NewHandle(__D0)
  93. pascal Handle NewHandle(Size byteCount)
  94.  = 0xA122; 
  95. #pragma parameter __A0 NewHandleSys(__D0)
  96. pascal Handle NewHandleSys(Size byteCount)
  97.  = 0xA522; 
  98. #pragma parameter __A0 NewHandleClear(__D0)
  99. pascal Handle NewHandleClear(Size byteCount)
  100.  = 0xA322; 
  101. #pragma parameter __A0 NewHandleSysClear(__D0)
  102. pascal Handle NewHandleSysClear(Size byteCount)
  103.  = 0xA722; 
  104. #pragma parameter __A0 HandleZone(__A0)
  105. pascal THz HandleZone(Handle h)
  106.  = 0xA126; 
  107. #pragma parameter __A0 RecoverHandle(__A0)
  108. pascal Handle RecoverHandle(Ptr p)
  109.  = 0xA128; 
  110. #pragma parameter __A0 RecoverHandleSys(__A0)
  111. pascal Handle RecoverHandleSys(Ptr p)
  112.  = 0xA528; 
  113. #pragma parameter __A0 NewPtr(__D0)
  114. pascal Ptr NewPtr(Size byteCount)
  115.  = 0xA11E; 
  116. #pragma parameter __A0 NewPtrSys(__D0)
  117. pascal Ptr NewPtrSys(Size byteCount)
  118.  = 0xA51E; 
  119. #pragma parameter __A0 NewPtrClear(__D0)
  120. pascal Ptr NewPtrClear(Size byteCount)
  121.  = 0xA31E; 
  122. #pragma parameter __A0 NewPtrSysClear(__D0)
  123. pascal Ptr NewPtrSysClear(Size byteCount)
  124.  = 0xA71E; 
  125. #pragma parameter __A0 PtrZone(__A0)
  126. pascal THz PtrZone(Ptr p)
  127.  = 0xA148; 
  128. #define GZSaveHnd() (* (Handle*) 0x0328)
  129. #define TopMem() (* (Ptr*) 0x0108)
  130. #pragma parameter __D0 MaxBlock
  131. pascal long MaxBlock(void)
  132.  = 0xA061; 
  133. #pragma parameter __D0 MaxBlockSys
  134. pascal long MaxBlockSys(void)
  135.  = 0xA461; 
  136. #pragma parameter __D0 StackSpace
  137. pascal long StackSpace(void)
  138.  = 0xA065; 
  139. #pragma parameter __A0 NewEmptyHandle
  140. pascal Handle NewEmptyHandle(void)
  141.  = 0xA166; 
  142. #pragma parameter __A0 NewEmptyHandleSys
  143. pascal Handle NewEmptyHandleSys(void)
  144.  = 0xA566; 
  145. #pragma parameter HLock(__A0)
  146. pascal void HLock(Handle h)
  147.  = 0xA029; 
  148. #pragma parameter HUnlock(__A0)
  149. pascal void HUnlock(Handle h)
  150.  = 0xA02A; 
  151. #pragma parameter HPurge(__A0)
  152. pascal void HPurge(Handle h)
  153.  = 0xA049; 
  154. #pragma parameter HNoPurge(__A0)
  155. pascal void HNoPurge(Handle h)
  156.  = 0xA04A; 
  157. #pragma parameter HLockHi(__A0)
  158. pascal void HLockHi(Handle h)
  159.  = {0xA064,0xA029}; 
  160. #if SystemSixOrLater
  161. #pragma parameter __D0 StripAddress(__D0)
  162. pascal Ptr StripAddress(void *theAddress)
  163.  = 0xA055; 
  164. #else
  165. pascal Ptr StripAddress(void *theAddress);
  166. #endif
  167. #pragma parameter __D0 Translate24To32(__D0)
  168. pascal Ptr Translate24To32(void *addr24)
  169.  = 0xA091; 
  170. pascal Handle TempNewHandle(Size logicalSize,OSErr *resultCode)
  171.  = {0x3F3C,0x001D,0xA88F}; 
  172. pascal Size TempMaxMem(Size *grow)
  173.  = {0x3F3C,0x0015,0xA88F}; 
  174. pascal long TempFreeMem(void)
  175.  = {0x3F3C,0x0018,0xA88F}; 
  176. /*  Temporary Memory routines renamed, but obsolete, in System 7.0 and later.  */
  177. pascal void TempHLock(Handle h,OSErr *resultCode)
  178.  = {0x3F3C,0x001E,0xA88F}; 
  179. pascal void TempHUnlock(Handle h,OSErr *resultCode)
  180.  = {0x3F3C,0x001F,0xA88F}; 
  181. pascal void TempDisposeHandle(Handle h,OSErr *resultCode)
  182.  = {0x3F3C,0x0020,0xA88F}; 
  183. pascal Ptr TempTopMem(void)
  184.  = {0x3F3C,0x0016,0xA88F}; 
  185. /*  Temporary Memory routines as they were known before System 7.0.  */
  186. pascal Size MFMaxMem(Size *grow)
  187.  = {0x3F3C,0x0015,0xA88F}; 
  188. pascal long MFFreeMem(void)
  189.  = {0x3F3C,0x0018,0xA88F}; 
  190. pascal Handle MFTempNewHandle(Size logicalSize,OSErr *resultCode)
  191.  = {0x3F3C,0x001D,0xA88F}; 
  192. pascal void MFTempHLock(Handle h,OSErr *resultCode)
  193.  = {0x3F3C,0x001E,0xA88F}; 
  194. pascal void MFTempHUnlock(Handle h,OSErr *resultCode)
  195.  = {0x3F3C,0x001F,0xA88F}; 
  196. pascal void MFTempDisposHandle(Handle h,OSErr *resultCode)
  197.  = {0x3F3C,0x0020,0xA88F}; 
  198. pascal Ptr MFTopMem(void)
  199.  = {0x3F3C,0x0016,0xA88F}; 
  200. pascal void InitApplZone(void)
  201.  = 0xA02C; 
  202. pascal void InitZone(GrowZoneProcPtr pgrowZone,short cmoreMasters,void *limitPtr,
  203.  void *startPtr); 
  204. #pragma parameter SetZone(__A0)
  205. pascal void SetZone(THz hz)
  206.  = 0xA01B; 
  207. #pragma parameter __D0 CompactMem(__D0)
  208. pascal Size CompactMem(Size cbNeeded)
  209.  = 0xA04C; 
  210. #pragma parameter __D0 CompactMemSys(__D0)
  211. pascal Size CompactMemSys(Size cbNeeded)
  212.  = 0xA44C; 
  213. #pragma parameter PurgeMem(__D0)
  214. pascal void PurgeMem(Size cbNeeded)
  215.  = 0xA04D; 
  216. #pragma parameter PurgeMemSys(__D0)
  217. pascal void PurgeMemSys(Size cbNeeded)
  218.  = 0xA44D; 
  219. #pragma parameter __D0 FreeMem
  220. pascal long FreeMem(void)
  221.  = 0xA01C; 
  222. #pragma parameter __D0 FreeMemSys
  223. pascal long FreeMemSys(void)
  224.  = 0xA41C; 
  225. #pragma parameter ResrvMem(__D0)
  226. pascal void ResrvMem(Size cbNeeded)
  227.  = 0xA040; 
  228. #pragma parameter ReserveMem(__D0)
  229. pascal void ReserveMem(Size cbNeeded)
  230.  = 0xA040; 
  231. #pragma parameter ReserveMemSys(__D0)
  232. pascal void ReserveMemSys(Size cbNeeded)
  233.  = 0xA440; 
  234. #pragma parameter __D0 MaxMem(__A1)
  235. pascal Size MaxMem(Size *grow)
  236.  = {0xA11D,0x2288}; 
  237. #pragma parameter __D0 MaxMemSys(__A1)
  238. pascal Size MaxMemSys(Size *grow)
  239.  = {0xA51D,0x2288}; 
  240. #pragma parameter SetGrowZone(__A0)
  241. pascal void SetGrowZone(GrowZoneProcPtr growZone)
  242.  = 0xA04B; 
  243. #pragma parameter SetApplLimit(__A0)
  244. pascal void SetApplLimit(void *zoneLimit)
  245.  = 0xA02D; 
  246. #pragma parameter MoveHHi(__A0)
  247. pascal void MoveHHi(Handle h)
  248.  = 0xA064; 
  249. #pragma parameter DisposPtr(__A0)
  250. pascal void DisposPtr(Ptr p)
  251.  = 0xA01F; 
  252. #pragma parameter DisposePtr(__A0)
  253. pascal void DisposePtr(Ptr p)
  254.  = 0xA01F; 
  255. pascal Size GetPtrSize(Ptr p); 
  256. #pragma parameter SetPtrSize(__A0,__D0)
  257. pascal void SetPtrSize(Ptr p,Size newSize)
  258.  = 0xA020; 
  259. #pragma parameter DisposHandle(__A0)
  260. pascal void DisposHandle(Handle h)
  261.  = 0xA023; 
  262. #pragma parameter DisposeHandle(__A0)
  263. pascal void DisposeHandle(Handle h)
  264.  = 0xA023; 
  265. #pragma parameter SetHandleSize(__A0,__D0)
  266. pascal void SetHandleSize(Handle h,Size newSize)
  267.  = 0xA024; 
  268. pascal Size GetHandleSize(Handle h);
  269. #pragma parameter ReallocHandle(__A0,__D0)
  270. pascal void ReallocHandle(Handle h,Size byteCount)
  271.  = 0xA027; 
  272. #pragma parameter ReallocateHandle(__A0,__D0)
  273. pascal void ReallocateHandle(Handle h,Size byteCount)
  274.  = 0xA027; 
  275. #pragma parameter EmptyHandle(__A0)
  276. pascal void EmptyHandle(Handle h)
  277.  = 0xA02B; 
  278. #pragma parameter HSetRBit(__A0)
  279. pascal void HSetRBit(Handle h)
  280.  = 0xA067; 
  281. #pragma parameter HClrRBit(__A0)
  282. pascal void HClrRBit(Handle h)
  283.  = 0xA068; 
  284. pascal void MoreMasters(void)
  285.  = 0xA036; 
  286. #pragma parameter BlockMove(__A0,__A1,__D0)
  287. pascal void BlockMove(const void *srcPtr,void *destPtr,Size byteCount)
  288.  = 0xA02E; 
  289. #define MemError() (* (OSErr*) 0x0220)
  290. pascal void PurgeSpace(long *total,long *contig); 
  291. #pragma parameter __D0 HGetState(__A0)
  292. pascal char HGetState(Handle h)
  293.  = 0xA069; 
  294. #pragma parameter HSetState(__A0,__D0)
  295. pascal void HSetState(Handle h,char flags)
  296.  = 0xA06A; 
  297. #pragma parameter SetApplBase(__A0)
  298. pascal void SetApplBase(void *startPtr)
  299.  = 0xA057; 
  300. pascal void MaxApplZone(void)
  301.  = 0xA063; 
  302. #pragma parameter __D0 HoldMemory(__A0,__A1)
  303. pascal OSErr HoldMemory(void *address,unsigned long count)
  304.  = {0x7000,0xA05C}; 
  305. #pragma parameter __D0 UnholdMemory(__A0,__A1)
  306. pascal OSErr UnholdMemory(void *address,unsigned long count)
  307.  = {0x7001,0xA05C}; 
  308. #pragma parameter __D0 LockMemory(__A0,__A1)
  309. pascal OSErr LockMemory(void *address,unsigned long count)
  310.  = {0x7002,0xA05C}; 
  311. #pragma parameter __D0 LockMemoryContiguous(__A0,__A1)
  312. pascal OSErr LockMemoryContiguous(void *address,unsigned long count)
  313.  = {0x7004,0xA05C}; 
  314. #pragma parameter __D0 UnlockMemory(__A0,__A1)
  315. pascal OSErr UnlockMemory(void *address,unsigned long count)
  316.  = {0x7003,0xA05C}; 
  317. pascal OSErr GetPhysical(LogicalToPhysicalTable *addresses,unsigned long *physicalEntryCount); 
  318. #pragma parameter __D0 DeferUserFn(__A0,__D0)
  319. pascal OSErr DeferUserFn(ProcPtr userFunction,void *argument)
  320.  = 0xA08F; 
  321. #pragma parameter __D0 DebuggerGetMax
  322. pascal long DebuggerGetMax(void)
  323.  = {0x7000,0xA08D}; 
  324. pascal void DebuggerEnter(void)
  325.  = {0x7001,0xA08D}; 
  326. pascal void DebuggerExit(void)
  327.  = {0x7002,0xA08D}; 
  328. pascal void DebuggerPoll(void)
  329.  = {0x7003,0xA08D}; 
  330. #pragma parameter __D0 GetPageState(__A0)
  331. pascal PageState GetPageState(const void *address)
  332.  = {0x7004,0xA08D}; 
  333. #pragma parameter __D0 PageFaultFatal
  334. pascal Boolean PageFaultFatal(void)
  335.  = {0x7005,0xA08D}; 
  336. #pragma parameter __D0 DebuggerLockMemory(__A0,__A1)
  337. pascal OSErr DebuggerLockMemory(void *address,unsigned long count)
  338.  = {0x7006,0xA08D}; 
  339. #pragma parameter __D0 DebuggerUnlockMemory(__A0,__A1)
  340. pascal OSErr DebuggerUnlockMemory(void *address,unsigned long count)
  341.  = {0x7007,0xA08D}; 
  342. #pragma parameter __D0 EnterSupervisorMode
  343. pascal StatusRegisterContents EnterSupervisorMode(void)
  344.  = {0x7008,0xA08D}; 
  345. #ifdef __cplusplus
  346. }
  347. #endif
  348.  
  349. #endif
  350.